﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SecondLevelCaching.Data;
using SecondLevelCaching.Data.Models;
using SecondLevelCachingExample.Models;

namespace SecondLevelCachingExample.Controllers
{
    public class HomeController : Controller
    {
        private readonly IDbContext dataContext;

        public HomeController(IDbContext context)
        {
            this.dataContext = context;
        }

        public ActionResult Index()
        {
            var model = GetHomeModel(string.Empty);
            return View(model);
        }

        [HttpPost]
        public ActionResult Index(string searchTerm)
        {
            var model = GetHomeModel(searchTerm);
            return View("Index", model);
        }

        private HomeViewModel GetHomeModel(string searchTerm)
        {
            //var query = dataContext.Table<Customer>();
            //if (!string.IsNullOrEmpty(searchTerm))
            //    query = from c in query
            //            where c.ContactName.Contains(searchTerm)
            //            select c;

            //var customerList = (from c in query
            //                    orderby c.ContactName
            //                    select new CustomerModel
            //                    {
            //                        Id = c.CustomerID,
            //                        Name = c.ContactName
            //                    })
            //                    .ToList();
            IEnumerable<Customer> customerList1 = null;
            if (!string.IsNullOrEmpty(searchTerm))
            {
                customerList1 = dataContext.SqlQuery<Customer>("SELECT * FROM dbo.Customers WHERE ContactName LIKE '%" + searchTerm + "%'");
            }
            else
            {
                customerList1 = dataContext.SqlQuery<Customer>("SELECT * FROM dbo.Customers");
            }
            var customerList = customerList1.Select(c => new CustomerModel
                                                             {
                                                                 Id = c.CustomerID,
                                                                 Name = c.ContactName
                                                             }).ToList();
            var model = new HomeViewModel(customerList,
                EntityCache.Instance.CacheHits,
                EntityCache.Instance.CacheMisses,
                EntityCache.Instance.CacheItemAdds);

            return model;
        }

        public ActionResult About()
        {
            ViewBag.Message = "你的应用程序说明页。";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "你的联系方式页。";

            return View();
        }
    }
}
